using MediatR;
using ProduceBasicData.Domain.WarehouseManage.WarehouseEnum;
using ProduceBasicData.ErrorCode;

namespace ProduceBasicData.Api.Application.Command.WarehouseManage
{
    /// <summary>
    /// 出库命令
    /// </summary>
    public class OutWarehouseCommand : IRequest<ApiResult<int>>
    {
        /// <summary>
        /// 主键id
        /// </summary>
        public int Id { get; set; }

        /// <summary>
        /// 系统编码
        /// </summary>
        public string? OrderNumber { get; set; }

        /// <summary>
        /// 出库类型
        /// </summary>
        public StockOutType OutType { get; set; }

        /// <summary>
        /// 关联单号 (如生产单号、销售单号等)
        /// </summary>
        public string? RelatedOrderNumber { get; set; }

        /// <summary>
        /// 源仓库ID
        /// </summary>
        public int WarehouseId { get; set; }

        /// <summary>
        /// 客户ID
        /// </summary>
        public int? CustomerId { get; set; }

        /// <summary>
        /// 客户名称
        /// </summary>
        public string? CustomerName { get; set; }

        /// <summary>
        /// 状态
        /// </summary>
        public StockOutStatus Status { get; set; }

        /// <summary>
        /// 预计出库日期
        /// </summary>
        public DateTime? ExpectedOutDate { get; set; }

        /// <summary>
        /// 实际出库日期
        /// </summary>
        public DateTime? ActualOutDate { get; set; }

        /// <summary>
        /// 备注信息
        /// </summary>
        public string? Remark { get; set; }

        /// <summary>
        /// 领料数量 赋值
        /// </summary>
        public int? Num { get; set; }

        /// <summary>
        /// 更新人
        /// </summary>
        public string UpdateName { get; set; }

        /// <summary>
        /// 更新时间
        /// </summary>
        public DateTime UpdateTime { get; set; } = DateTime.Now;
    }
}